EFA(Elastic Fabric Adapter)対応のインスタンスタイプとスペック情報を AWS CLI で一覧出力したい
はじめに
EFA(Elastic Fabric Adapter)をサポートしているインスタンスタイプを確認したいです。
しかし、マネジメントコンソールからでは EFA のサポート状況を簡単に把握できませんでした。
本記事では AWS CLI を使い、EFA 対応インスタンスとスペックを一覧出力する方法を紹介します。
結論
EFA 対応インスタンスとスペック情報を取得するには、次のコマンドを実行してください。実行結果は CSV ファイルに保存されます。
(echo '"Instance Type","vCPU","Physical Cores","Architecture","Clock Speed(GHz)","Memory(MiB)","Instance Store(GB)","Network Performance"'; \
aws ec2 describe-instance-types --region ap-northeast-1 | jq -r '
.InstanceTypes[]
| select(.NetworkInfo.EfaSupported == true)
| [
.InstanceType,
.VCpuInfo.DefaultVCpus,
.VCpuInfo.DefaultCores,
.ProcessorInfo.SupportedArchitectures[0],
.ProcessorInfo.SustainedClockSpeedInGhz,
.MemoryInfo.SizeInMiB,
(if .InstanceStorageSupported then .InstanceStorageInfo.TotalSizeInGB else 0 end),
.NetworkInfo.NetworkPerformance
]
| @csv' ; ) | sort -t',' -k3 -n > efa.csv
スプレッドシートで実行結果の CSV ファイルを開いた様子。
課題と背景
EFA を利用した検証しようとしたとき、対応インスタンスタイプを確認する手間が大きいと感じました。
マネージメントコンソールからの確認
インスタンスタイプの一覧だけでは EFA 対応を確認できません。なお、ENA Express の対応は確認できます。
公式ドキュメントからの確認
Elastic Fabric Adapter for AI/ML and HPC workloads on Amazon EC2 - Amazon Elastic Compute Cloud
対応インスタンスタイプは確認できます。ただし、各インスタンスのスペックは確認できません。
AWS CLI で確認する方法もドキュメントに記載されています。こちらも同様にスペックまでは確認できません。
$ aws ec2 describe-instance-types --region us-east-1 --filters Name=network-info.efa-supported,Values=true --query "InstanceTypes[*].[InstanceType]" --output text | sort
c5n.18xlarge
c5n.9xlarge
c5n.metal
c6a.48xlarge
c6a.metal
c6gn.16xlarge
c6i.32xlarge
解決策
公式ドキュメント記載の aws ec2 describe-instance-types
コマンドをベースにして、以下の情報も載せた一覧を出力します。
- EFA 対応インスタンスの一覧
- vCPU 数と、物理コア数
- メモリー容量と、ネットワークパフォーマンスなど
echo
コマンドで CSV 用のヘッダー行を作成します。リージョンは東京(ap-northeast-1
)を指定しています。
(echo '"Instance Type","vCPU","Physical Cores","Architecture","Clock Speed(GHz)","Memory(MiB)","Instance Store(GB)","Network Performance"'; \
aws ec2 describe-instance-types --region ap-northeast-1 | jq -r '
.InstanceTypes[]
| select(.NetworkInfo.EfaSupported == true)
| [
.InstanceType,
.VCpuInfo.DefaultVCpus,
.VCpuInfo.DefaultCores,
.ProcessorInfo.SupportedArchitectures[0],
.ProcessorInfo.SustainedClockSpeedInGhz,
.MemoryInfo.SizeInMiB,
(if .InstanceStorageSupported then .InstanceStorageInfo.TotalSizeInGB else 0 end),
.NetworkInfo.NetworkPerformance
]
| @csv' ; ) | sort -t',' -k3 -n > efa.csv
実行結果の見方
実行結果は以下のような CSV ファイルとして出力されます。
"Instance Type","vCPU","Physical Cores","Architecture","Clock Speed(GHz)","Memory(MiB)","Instance Store(GB)","Network Performance"
"g4dn.8xlarge",32,16,"x86_64",2.5,131072,900,"50 Gigabit"
"g5.8xlarge",32,16,"x86_64",3.3,131072,900,"25 Gigabit"
"g6.8xlarge",32,16,"x86_64",3.4,131072,900,"25 Gigabit"
各列の意味
- Instance Type: インスタンスタイプ名
- vCPU: 仮想 CPU の数
- Physical Cores: 物理コア数
- Architecture: プロセッサアーキテクチャ
- Clock Speed: プロセッサのクロック周波数
- Memory: メモリ容量(MiB)
- Instance Store: インスタンスストアの容量(GB)
- Network Performance: ネットワーク性能
スプレッドシートで実行結果の CSV ファイルを開いた様子です。
まとめ
本記事で紹介した AWS CLI コマンドには以下のメリットがあります。
- EFA 対応インスタンス一覧とスペックを同時に出力できる
- CSV ファイルで出力されるため、Excel やスプレッドシートでの加工が容易
おわりに
HPC ワークロードや、機械学習のトレーニングでは EFA を利用することが多いです。多くは大きなインスタンスタイプを使うことになるため、大方 EFA に対応しています。しかし、EFA 検証のためにネットワーク帯域が太くかつ、コストの兼ね合いを考慮すると探す方法に難儀しました。そこで AWS CLI で出力した結果を残しておきました。CPU系のワークロードであれば、スポットインスタンスの価格も確認して検証するとよりコストを抑えられます。